/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.symcomp.webwupsi.rest; import java.text.DateFormat; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.Context; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.UriInfo; import org.codehaus.jettison.json.JSONStringer; import org.symcomp.openmath.OpenMathBase; import org.symcomp.scscp.Computation; import org.symcomp.scscp.SCSCPClient; import org.symcomp.wupsi.Wupsifer; /** * * @author hornp */ @Path("/systems/{sid}/computations") public class ComputationsResource { @GET @Produces("application/json") public String index(@PathParam("sid") String systemIdd) { String systemId = java.net.URLDecoder.decode(systemIdd); Wupsifer w = Wupsifer.getInstance(); SCSCPClient client = w.getClients().get(systemId); if (null==client) return "[]"; List<Computation> cc = client.getComputations(); DateFormat df = DateFormat.getInstance(); JSONStringer js = new JSONStringer(); try { // Begin array js.array(); for (Computation c : cc) { js.object(); js.key("id").value(c.getToken()); js.key("startedAt").value(df.format(c.getStartedAt())); js.key("finishedAt").value(df.format(c.getStartedAt())); js.endObject(); } js.endArray(); // end array } catch(Exception e) { e.printStackTrace(); System.exit(1); } return js.toString(); } @GET @Produces("application/json") @Path("/{id}") public String show(@PathParam("sid") String systemIdd, @PathParam("id") String idd) { String systemId = java.net.URLDecoder.decode(systemIdd); String id = java.net.URLDecoder.decode(idd); SCSCPClient sys = Wupsifer.getInstance().getClients().get(systemId); Computation c = sys.getComputation(id); // System.out.println(" ----> " + c.toString() + " " + id + " " + systemId); DateFormat df = DateFormat.getInstance(); JSONStringer js = new JSONStringer(); try { js.object(); js.key("id").value(c.getToken()); js.key("startedAt").value(df.format(c.getStartedAt())); js.key("finishedAt").value(df.format(c.getStartedAt())); js.key("commandL").value(c.getRequest().toLatex()); js.key("commandP").value(c.getRequest().toPopcorn()); js.key("commandX").value(c.getRequest().toXml()); js.key("resultL").value(c.getResult().toLatex()); js.key("resultP").value(c.getResult().toPopcorn()); js.key("resultX").value(c.getResult().toXml()); js.endObject(); } catch(Exception e) { e.printStackTrace(); System.exit(1); } return js.toString(); } @POST @Produces("application/json") public String create(@PathParam("sid") String systemIdd, @Context UriInfo ui) { String systemId = java.net.URLDecoder.decode(systemIdd); MultivaluedMap<String, String> queryParams = ui.getQueryParameters(); String command = queryParams.getFirst("command"); SCSCPClient sys = Wupsifer.getInstance().getClients().get(systemId); Wupsifer w = Wupsifer.getInstance(); try { w.compute(sys, OpenMathBase.parse(command)); } catch (Exception ignored) { return("Failure"); } return "OK"; } }